const { Sequelize } = require('sequelize');

// 创建 Sequelize 实例
const sequelize = new Sequelize('uniapp', 'root', 'root', {
  host: 'localhost',
  dialect: 'mysql',
  port: 3306,
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },
  logging: false, // 关闭SQL语句日志输出
  define: {
    timestamps: false, // 默认添加 createdAt 和 updatedAt 字段
    underscored: true, // 使用下划线命名风格
    // indexes: false, // 全局禁用自动创建索引
    freezeTableName: true // 防止表名自动复数化
  },
  // 添加字符集配置，解决字符集冲突问题
  // 使用utf8mb4以支持中文显示
  dialectOptions: {
    charset: 'utf8mb4',
    connectTimeout: 10000
  }
});

// 测试数据库连接函数
async function testConnection() {
  try {
    await sequelize.authenticate();
    console.log('✅ MySQL数据库连接成功！');
    
    // 注意：alter: true 可能会导致索引键过多的问题
    // 当表结构已经存在时，我们可以跳过同步或使用安全模式
    // 同步所有模型到数据库，但不自动修改现有表结构
    try {
      // 只同步不存在的表，不修改现有表
      await sequelize.sync({ force: false });
      console.log('✅ 所有模型已同步到数据库');
    } catch (syncError) {
      console.log('⚠️  模型同步过程中出现警告:', syncError.message);
      console.log('⚠️  数据库表结构可能需要手动更新');
    }
    
    return true;
  } catch (error) {
    console.error('❌ 数据库连接失败:', error.message);
    return false;
  }
}

// 获取数据库连接状态
function getConnectionStatus() {
  return sequelize.authenticate()
    .then(() => 'connected')
    .catch(() => 'disconnected');
}

module.exports = {
  sequelize,
  testConnection,
  getConnectionStatus
};